
package com.haotian.xml;

import java.io.InputStream;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import org.dom4j.Attribute;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;

public enum _XMLKit {
	instance;

	/**
	 * @Title: 获取xml对象
	 * @author: 张朋
	 * @date: 2016年10月25日 上午9:47:50
	 * @param filePath
	 * @throws DocumentException
	 * @return: Document
	 */
	public Document readerXML(String src) {
		ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
		if (classLoader == null) {
			classLoader = this.getClass().getClassLoader();
		}
		Document doc = null;
		try {
			SAXReader reader = new SAXReader();
			try (InputStream in = classLoader.getResourceAsStream(src)) {
				doc = reader.read(in);
			}
		} catch (Exception e) {
			e.printStackTrace();
			return null;
		}
		return doc;
	}

	/**
	 * @Title: 获得文档根节点
	 * @author: 张朋
	 * @date: 2016年10月25日 上午9:50:13
	 * @param doc
	 * @return
	 * @return: Element
	 */
	public Element getXMLRoot(Document doc) {
		Element root = doc.getRootElement();
		return root;
	}

	/**
	 * @Title: 获取某个节点下的指定id的子节点
	 * @author: 张朋
	 * @date: 2016年10月25日 上午9:54:17
	 * @param pnode
	 *            父节点
	 * @param qname
	 *            子节点名称
	 * @return: Element
	 */
	public Element getElementById(Element pnode, String elementID) {
		return pnode.elementByID(elementID);
	}

	/**
	 * @Title: 获得某节点下指定名称的所有子节点
	 * @author: 张朋
	 * @date: 2016年10月25日 上午9:56:49
	 * @param pnode
	 *            父节点
	 * @param qname
	 *            子节点名称
	 * @return: List<Element>
	 */
	@SuppressWarnings("rawtypes")
	public List<Element> getElements(Element pnode, String qname) {
		List<Element> elements = new ArrayList<Element>();
		for (Iterator it = pnode.elementIterator(); it.hasNext();) {
			Element element = (Element) it.next();
			elements.add(element);
		}
		return elements;
	}

	/**
	 * @Title: 获得某节点下指定名称的所有子节点
	 * @author: 张朋
	 * @date: 2016年10月25日 上午9:56:49
	 * @param pnode
	 *            父节点
	 * @param qname
	 *            子节点名称
	 * @return: List<Element>
	 */
	@SuppressWarnings("rawtypes")
	public List<Element> getElements2(Element pnode, String qname) {
		List nodes = pnode.elements(qname);
		List<Element> elements = new ArrayList<Element>();
		for (Iterator it = nodes.iterator(); it.hasNext();) {
			Element elm = (Element) it.next();
			elements.add(elm);
		}
		return elements;
	}

	/**
	 * @Title: 获取节点下属性的Text文本
	 * @author: 张朋
	 * @date: 2016年10月25日 上午10:06:14
	 * @param pnode
	 * @param qname
	 * @return
	 * @return: String
	 */
	public String getElementAttrText(Element pnode, String qname) {
		Attribute attr = pnode.attribute(qname);
		if (null != attr) {
			return attr.getText();
		} else {
			return null;
		}
	}

}
